﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Log_Canibalizacion_CabDAO
    {
        private readonly AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();


        public IEnumerable<Object> Listar(int intIdEstado)
        {

            IEnumerable<Object> lista = new List<Object>();

            var sqlText = "SELECT f.ID_LOG_CANIBALIZACION_CAB,f.NRO_LOTE, f.NRO_MOTOR, f.VIN, f.DES_COLOR, "+
                           "f.COD_ORG_VENTAS, f.ANIO_MODELO, f.ANIO_FABRICACION, f.DES_MODELO, "+
                            "f.DES_MARCA, f.ESTADO_ARMADO, f.ESTADO_PENDIENTE, f.FECHA_CANIBALIZACION, "+
                            "f.FECHA_ARMADO, f.NRO_DIAS,f.ID_ESTADO,f.IMP_COSTO_S,f.IMP_COSTO_D,f.COSTO_CANIBALIZADO,f.PORCENTAJE_CANIBALIZADO " +
                            "FROM dbo.FU_ReportCanibalizacion("+intIdEstado+") AS f";
            var q = ContextoDeObjs.ExecuteStoreQuery<T_LOG_CANIBALIZACION_CAB_LISTADO>(sqlText);
            lista = q.ToList();

            return lista;

        }



        public IEnumerable<Object> listarPorEstadoPendiente(int idEstado) {

            IEnumerable<Object> lista = new List<Object>();
            var q = from c in ContextoDeObjs.T_LOG_CANIBALIZACION_CAB
                    join u in ContextoDeObjs.V_Usuario on c.ID_USUARIO equals u.ID_USUARIO
                    join m in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on c.ID_ESTADO equals m.ID_GENERAL_DET into p1
                    join m1 in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on c.ID_ESTADO_ARMADO equals m1.ID_GENERAL_DET into p2
                    from s in p1.DefaultIfEmpty()
                    from s1 in p2.DefaultIfEmpty()
                    where c.ID_ESTADO == idEstado
                    select new
                    {

                        c.NRO_LOTE,
                        c.ANIO_FABRICACION,
                        c.ANIO_MODELO,
                        c.COD_ORG_VENTAS,
                        c.DES_COLOR,
                        c.DES_JERARQUIA_SUP,
                        c.FECHA_ARMADO,
                        c.FECHA_CANIBALIZACION,
                        c.ID_ESTADO,
                        c.ID_ESTADO_ARMADO,
                        c.ID_LOG_CANIBALIZACION_CAB,
                        c.ID_USUARIO,
                        c.IMP_COSTO_D,
                        c.IMP_COSTO_S,
                        c.NRO_MOTOR,
                        c.OT_SAP,
                        c.VIN,
                        NOMBRE_APELLIDOS = u.DES_NOMBRE + " " + u.DES_APELLIDOS,
                        USUARIO = c.ID_USUARIO,
                        CORREO = u.DES_EMAIL,
                        ESTADO_ARMADO = s1.DES_CORTA,
                        ESTADO =s.DES_CORTA



                    };


            lista = q.ToList();


            return lista;
        
        }





        public IEnumerable<Object> ListarPendientes(String strNroChasis)
        {
            IEnumerable<Object> lista = new List<Object>();

            var q = (from t in ContextoDeObjs.T_LOG_CANIBALIZACION_CAB
                     join v in ContextoDeObjs.TD_VEHICULOS on t.NRO_LOTE equals v.NRO_LOTE
                     join tm in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on t.ID_ESTADO.Value equals tm.ID_GENERAL_DET
                     where v.NRO_CHASIS.Contains(strNroChasis) && t.ID_ESTADO == 148
                     select new
                     {
                         t.ID_LOG_CANIBALIZACION_CAB,
                         t.NRO_LOTE,
                         t.COD_ORG_VENTAS,
                         t.NRO_MOTOR,
                         VIN = t.VIN,
                         t.ANIO_MODELO,
                         t.ANIO_FABRICACION,
                         t.DES_JERARQUIA_SUP,
                         ESTADO = tm.DES_CORTA,
                         ID_ESTADO = t.ID_ESTADO,
                         t.DES_COLOR,
                         t.FECHA_CANIBALIZACION,
                         v.DES_MODELO,
                         v.DES_MARCA,
                         t.FECHA_ARMADO


                     }).Distinct();

            lista = q.ToList();
            return lista;
        }

        public bool Insertar(T_LOG_CANIBALIZACION_CAB Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("T_LOG_CANIBALIZACION_CAB", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch
            {

                return false;
            }
            return true;
        }

        public bool Modificar(T_LOG_CANIBALIZACION_CAB Obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_LOG_CANIBALIZACION_CAB", Obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(Obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
            }
            catch
            {
                return false;
            }
            return true;
        }


        public bool ActualizaEstado_LOG_CANIBALIZACION_CAB(int id_estado, int intIdLogCanibalizacionCab)
        {

            ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_LOG_CANIBALIZACION_CAB SET	ID_ESTADO ={0} WHERE ID_LOG_CANIBALIZACION_CAB={1}", id_estado, intIdLogCanibalizacionCab));
            return true;

        }
        public bool ActualizaEstadoArmado(int id_estado, int intIdLogCanibalizacionCab)
        {
            ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_LOG_CANIBALIZACION_CAB SET	ID_ESTADO_ARMADO ={0} WHERE ID_LOG_CANIBALIZACION_CAB={1}", id_estado, intIdLogCanibalizacionCab));
            return true;
        }

        public List<T_LOG_CANIBALIZACION_CAB_EN> ListarPorIdCab(int intIdCab)
        {
            List<T_LOG_CANIBALIZACION_CAB_EN> lista = new List<T_LOG_CANIBALIZACION_CAB_EN>();
            var q = (from t in ContextoDeObjs.T_LOG_CANIBALIZACION_CAB
                     join v in ContextoDeObjs.TD_VEHICULOS on t.NRO_LOTE equals v.NRO_LOTE
                     join tm in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on t.ID_ESTADO equals tm.ID_GENERAL_DET
                     where t.ID_LOG_CANIBALIZACION_CAB == intIdCab
                     select new T_LOG_CANIBALIZACION_CAB_EN
                     {
                         ID_LOG_CANIBALIZACION_CAB = t.ID_LOG_CANIBALIZACION_CAB,
                         NRO_LOTE = t.NRO_LOTE,
                         COD_ORG_VENTAS = t.COD_ORG_VENTAS,
                         NRO_MOTOR = t.NRO_MOTOR,
                         VIN = t.VIN,
                         ANIO_MODELO = t.ANIO_MODELO,
                         ANIO_FABRICACION = t.ANIO_FABRICACION,
                         DES_JERARQUIA_SUP = t.DES_JERARQUIA_SUP,
                         ESTADO = tm.DES_CORTA,
                         ID_ESTADO = t.ID_ESTADO,
                         DES_COLOR = t.DES_COLOR,
                         FECHA_CANIBALIZACION = t.FECHA_CANIBALIZACION,
                         DES_MODELO = v.DES_MODELO,
                         FECHA_ARMADO = t.FECHA_ARMADO,
                         OT_SAP = t.OT_SAP,
                         DES_MARCA = v.DES_MARCA,
                         ID_ESTADO_ARMADO = t.ID_ESTADO_ARMADO,
                         IMP_COSTO_S=t.IMP_COSTO_S,
                         IMP_COSTO_D=t.IMP_COSTO_D

                     }).Distinct();
            lista = q.ToList();
            return lista;

        }






        public IEnumerable<Object> ListaEstado()
        {

            IEnumerable<Object> lista = new List<Object>();
            var q = from e in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                    join d in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on e.ID_GENERAL_CAB equals d.ID_GENERAL_CAB
                    where e.NOM_TABLA == "T_LOG_CANIBALIZACION_ESTADO_ARMADO"
                    select new
                    {
                        d.ID_GENERAL_DET,
                        d.DES_CORTA
                    };

            lista = q.ToList();
            return lista;

        }
        public IEnumerable<Object> ListaEstadoSolicitado()
        {

            IEnumerable<Object> lista = new List<Object>();
            var q = from e in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                    join d in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on e.ID_GENERAL_CAB equals d.ID_GENERAL_CAB
                    where e.NOM_TABLA == "T_LOG_CANIBALIZACION_ESTADO"
                    select new
                    {
                        d.ID_GENERAL_DET,
                        d.DES_CORTA
                    };

            lista = q.ToList();
            return lista;

        }




        public IEnumerable<Object> listarCorreo()
        {

            IEnumerable<Object> lista = new List<Object>();

            var q = from c in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                    join d in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on c.ID_GENERAL_CAB equals d.ID_GENERAL_CAB
                    join u in ContextoDeObjs.V_Usuario on d.DES_CORTA equals u.ID_USUARIO
                    where c.NOM_TABLA == "T_LOG_CANIBALIZACION_CORREO" && d.IND_ACTIVO == true
                    select new
                    {
                        u.DES_EMAIL,
                        NOMBRE_APELLIDOS = u.DES_NOMBRE + " " + u.DES_APELLIDOS
                    };
            lista = q.OrderBy(x => x.NOMBRE_APELLIDOS).ToList();

            return lista;
        }



        public int ActualizarFechaCanibalizacion(int intIdLogCanibalizacionCab, DateTime? fecha_canibalizacion)
        {
            using (ContextoDeObjs)
            {
                var canibalizacion = (from s in ContextoDeObjs.T_LOG_CANIBALIZACION_CAB
                                      where s.ID_LOG_CANIBALIZACION_CAB == intIdLogCanibalizacionCab
                                      select s).FirstOrDefault();
                canibalizacion.FECHA_CANIBALIZACION = fecha_canibalizacion;
                int num = ContextoDeObjs.SaveChanges();
                return num;
            }
        }


        public int ActualizarFechaArmado(int intIdLogCanibalizacionCab, DateTime? fecha_armado)
        {
            using (ContextoDeObjs)
            {
                var canibalizacion = (from s in ContextoDeObjs.T_LOG_CANIBALIZACION_CAB
                                      where s.ID_LOG_CANIBALIZACION_CAB == intIdLogCanibalizacionCab
                                      select s).FirstOrDefault();
                canibalizacion.FECHA_ARMADO = fecha_armado;
                int num = ContextoDeObjs.SaveChanges();
                return num;
            }
        }

    }
}
